(bug 11857) Add 'protect' option to importImages.php maintenance script.
authorAndrew Garrett <werdna@users.mediawiki.org>
Tue, 3 Mar 2009 02:56:30 +0000 (02:56 +0000)
committerAndrew Garrett <werdna@users.mediawiki.org>
Tue, 3 Mar 2009 02:56:30 +0000 (02:56 +0000)
Includes related Article changes -- fixing an E_NOTICE and reporting errors in the debug log.

includes/Article.php
maintenance/importImages.php

index f236de5..3f079a9 100644 (file)
@@ -1943,7 +1943,18 @@ class Article {
                global $wgUser, $wgRestrictionTypes, $wgContLang;
 
                $id = $this->mTitle->getArticleID();
-               if( $id <= 0 || wfReadOnly() || !$this->mTitle->userCan('protect') ) {
+               if ( $id <= 0 ) {
+                       wfDebug( "updateRestrictions failed: $id <= 0\n" );
+                       return false;
+               }
+               
+               if ( wfReadOnly() ) {
+                       wfDebug( "updateRestrictions failed: read-only\n" );
+                       return false;
+               }
+               
+               if ( wfReadOnly() ) {
+                       wfDebug( "updateRestrictions failed: insufficient permissions\n" );
                        return false;
                }
 
@@ -2014,6 +2025,9 @@ class Article {
                                $encodedExpiry = array();
                                $protect_description = '';
                                foreach( $limit as $action => $restrictions  ) {
+                                       if ( !isset($expiry[$action]) )
+                                               $expiry[$action] = 'infinite';
+                                       
                                        $encodedExpiry[$action] = Block::encodeExpiry($expiry[$action], $dbw );
                                        if( $restrictions != '' ) {
                                                $protect_description .= "[$action=$restrictions] (";
index 4c6082b..7997b0d 100644 (file)
@@ -21,6 +21,13 @@ if( count( $args ) > 0 ) {
 
        $dir = $args[0];
 
+       # Check Protection
+       if (isset($options['protect']) && isset($options['unprotect']))
+                       die("Cannot specify both protect and unprotect.  Only 1 is allowed.\n");
+
+       if ($options['protect'] == 1)
+                       die("You must specify a protection option.\n");
+
        # Prepare the list of allowed extensions
        global $wgFileExtensions;
        $extensions = isset( $options['extensions'] )
@@ -114,6 +121,25 @@ if( count( $args ) > 0 ) {
                                        continue;
                                }
                        }
+                       
+                       $doProtect = false;
+                       $restrictions = array();
+                       
+                       global $wgRestrictionLevels;
+                       
+                       $protectLevel = isset($options['protect']) ? $options['protect'] : null;
+                       
+                       if ( $protectLevel && in_array( $protectLevel, $wgRestrictionLevels ) ) {
+                                       $restrictions['move'] = $protectLevel;
+                                       $restrictions['edit'] = $protectLevel;
+                                       $doProtect = true;
+                       }
+                       if (isset($options['unprotect'])) {
+                                       $restrictions['move'] = '';
+                                       $restrictions['edit'] = '';
+                                       $doProtect = true;
+                       }
+
 
                        $$svar++;
                        if ( isset( $options['dry'] ) ) {
@@ -121,6 +147,21 @@ if( count( $args ) > 0 ) {
                        } else if ( $image->recordUpload( $archive->value, $commentText, $license ) ) {
                                # We're done!
                                echo( "done.\n" );
+                               if ($doProtect) {
+                                               # Protect the file
+                                               $article = new Article( $title );
+                                               echo "\nWaiting for slaves...\n";
+                                               // Wait for slaves.
+                                               sleep(2.0);
+                                               wfWaitForSlaves( 1.0 );
+                                               
+                                               echo( "\nSetting image restrictions ... " );
+                                               if ( $article->updateRestrictions($restrictions) )
+                                                               echo( "done.\n" );
+                                               else
+                                                               echo( "failed.\n" );
+                               }
+
                        } else {
                                echo( "failed.\n" );
                        }
@@ -166,6 +207,8 @@ Options:
                        but the extension <ext>.
 --license=<code>       Use an optional license template
 --dry                  Dry run, don't import anything
+--protect=<protect>     Specify the protect value (autoconfirmed,sysop)
+--unprotect             Unprotects all uploaded images
 
 END;
        exit();